-- $LastChangedDate: 2007-06-01 02:52:33 +0200 (Fri, 01 Jun 2007) $
-- $LastChangedRevision: 149 $
-- $LastChangedBy: vicente $

PRAGMA Assertion_Policy (Check);

-- packages de ada

-- procedimiento principal del gimnasio
WITH Tareas;
WITH Tareas.Cliente;
USE Tareas.Cliente;
WITH Tareas.Gmonitores;
USE Tareas.Gmonitores;
WITH Tareas.Gaparatos;
USE Tareas.Gaparatos;
WITH Tareas.Gmedicos;
USE Tareas.Gmedicos;
WITH Tareas.Sseguimiento;
USE Tareas.Sseguimiento;
WITH Tareas.Consola;
USE Tareas.Consola;
WITH Tareas.Teclado;
USE Tareas.Teclado;

PROCEDURE Main IS
   -- tareas
   M           : Monitorptr;
   C           : Clienteptr;
   A           : Aparatoptr;
   Me          : Medicoptr;
   Gmon        : Gmonitoresptr;
   Gapar       : Gaparatosptr;
   Gmed        : Gmedicosptr;
   Sseg        : Sseguimientoptr;
   Pantalla    : Consolaptr;
   Controlador : Tecladoptr;
BEGIN

   Gmon := NEW Gmonitores;
   Gapar := NEW Gaparatos;
   Gmed:= NEW Gmedicos;
   Sseg := NEW Sseguimiento;
   -- tarea para gestionar la consola
   Pantalla:= NEW Consola;
   -- tarea para gestionar el teclado
   Controlador:= NEW Teclado(Gmon, Gapar, Gmed, Sseg, Pantalla);

   -- crear los monitores para el gestor recien creado
   FOR I IN 1 .. Tareas.Numinicialmonitores LOOP
      M := NEW Monitor(Gmon, Gmed, Sseg);
   END LOOP;

   -- lanzar los clientes
   FOR I IN 1 .. Tareas.Numinicialclientes LOOP
      C := NEW Cliente(Crear_Cliente, Gmon, Gapar);
   END LOOP;

   -- crear los aparatos para el gestor de aparatos
   FOR I IN 1 .. Tareas.Numinicialaparatos LOOP
      A := NEW Aparato(Gapar, Gmon, Sseg);
   END LOOP;

   -- crear los medicos para el gestor de medicos
   FOR I IN 1 .. Tareas.Numinicialmedicos LOOP
      Me := NEW Medico(Gmed);
   END LOOP;

END Main;
